home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / plnk081.zip / pilot-link.0.8.1 / libcc / memo.cc < prev    next >
C/C++ Source or Header  |  1997-05-23  |  2KB  |  77 lines

  1.  
  2. #include "pi-source.h"
  3. #include "pi-memo.h"
  4.  
  5. void memo_t::unpack(void *text, int firstTime) 
  6. {
  7.      if (!firstTime && _text)
  8.       delete _text;
  9.      
  10.      _size = strlen((const char *) text) + 1;
  11.      _text = new char [_size];
  12.      
  13.      (void) strcpy(_text, (const char *) text);
  14. }
  15.  
  16. // The indirection just to make the base class happy
  17. void *memo_t::internalPack(unsigned char *buf) 
  18. {
  19.      return strcpy((char *) buf, _text);
  20. }
  21.  
  22. void *memo_t::pack(int *len) 
  23. {
  24.      *len = _size;
  25.      unsigned char *ret = new unsigned char [_size];
  26.      return internalPack(ret);
  27. }
  28.  
  29. void *memo_t::pack(void *buf, int *len) 
  30. {
  31.      if (*len < _size)
  32.       return NULL;
  33.  
  34.      *len = _size;
  35.  
  36.      return internalPack((unsigned char *) buf);
  37. }
  38.  
  39. memo_t::memo_t(const memo_t &oldCopy) 
  40. {
  41.      int len = strlen(oldCopy._text);
  42.      _text = new char [len + 1];
  43.      (void) strcpy(_text, oldCopy._text);
  44.  
  45.      _size = oldCopy._size;
  46.      _next = oldCopy._next;
  47. }
  48.  
  49. // We can't just point to the data, as it might be deleted.  Make a copy
  50. void memoList_t::merge(memo_t &memo) 
  51. {
  52.      memo._next = _head;
  53.      _head = new memo_t(memo);
  54. }
  55.  
  56. // We can't just point to the data in the list, as it might get deleted on
  57. // us. We need to make a real copy
  58. void memoList_t::merge(memoList_t &list) 
  59. {
  60.      memo_t *newguy;
  61.  
  62.      for (memo_t *ptr = list._head; ptr != NULL; ptr = ptr->_next) {
  63.       newguy = new memo_t(ptr);
  64.       newguy->_next = _head;
  65.       _head = newguy;
  66.      }
  67. }
  68.  
  69. memoList_t::~memoList_t(void) {
  70.      memo_t *ptr, *next;
  71.  
  72.      for (ptr = _head; ptr != NULL; ptr = next) {
  73.       next = ptr->_next;
  74.       delete ptr;
  75.      }
  76. }
  77.